package com.tt.dp.compound.observer;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 这个类是观察者模式中的被观察主体
 *
 * 其实主体应该是每一种鸭子子类，但是通过模式运用(应该是装饰者模式)，这样就不需要在每个鸭子类中都编写相同的代码(就是观察者模式的代码)
 */
public class Observable implements QuackObservable {

    private List<Observer> observers = new ArrayList<Observer>();

    private QuackObservable duck;

    public Observable(QuackObservable duck) {
        this.duck = duck;
    }

    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    public void notifyObservers() {

        Iterator<Observer> it = observers.iterator();

        while (it.hasNext()) {
            Observer observer = it.next();

            observer.update(duck);
        }
    }
}
